09a367d2002927bd281a67afef577668be672ac3,src/main/org/codehaus/groovy/transform/StaticTypesTransformation.java,Visitor,visitMethodCallExpression,#MethodCallExpression#,265

Before Change


        @Override
        public void visitMethodCallExpression(MethodCallExpression call) {
            super.visitMethodCallExpression(call);
            if (call.getMethodAsString()==null) {
                addStaticTypeError("cannot resolve dynamic method name at compile time.", call.getMethod());
            } else {
                ClassNode[] args = getArgumentTypes(InvocationWriter.makeArgumentList(call.getArguments()), classNode);

After Change


        @Override
        public void visitMethodCallExpression(MethodCallExpression call) {
            super.visitMethodCallExpression(call);
            final String name = call.getMethodAsString();
            if (name==null) {
                addStaticTypeError("cannot resolve dynamic method name at compile time.", call.getMethod());
            } else {
                ClassNode[] args = getArgumentTypes(InvocationWriter.makeArgumentList(call.getArguments()), classNode);
                final Expression objectExpression = call.getObjectExpression();
                final ClassNode receiver = getType(objectExpression, classNode);
                MethodNode mn = findMethod(call, receiver, name, args);
                if (mn==null) {
                    if (objectExpression instanceof VariableExpression) {
                        VariableExpression variableExpression = (VariableExpression) objectExpression;
                        if (!temporaryIfBranchTypeInformation.isEmpty()) {
                            final Map<Expression, List<ClassNode>> tempo = temporaryIfBranchTypeInformation.peek();
                            List<ClassNode> potentialReceiverType = tempo.get(findTargetVariable(variableExpression));
                            if (potentialReceiverType!=null) {
                                for (ClassNode potentialReceiver : potentialReceiverType) {
                                    mn = findMethod(call, potentialReceiver, name, args);
                                    if (mn!=null) break;
                                }
                            }
                        }
                    }
                    if (mn==null) {
                        addStaticTypeError("Cannot find matching method " + receiver.getName() + "#" + toMethodParametersString(name, args), call);
                        return;
                    }